package tech.eyao.hs60x.utils;

/**
 * @author hejian
 * @date 2018年1月23日 上午11:34:31
 */
public class LocationUtils {
	
private static double EARTH_RADIUS = 6378.137;   

	public static void main(String[] args) {
		System.out.println(getDistanceM(121.462975,31.188575, 121.461075,31.189726));
	}
	
	/**
	 * 千米
	 * @param long1
	 * @param lat1
	 * @param long2
	 * @param lat2
	 * @return
	 */
	public static double getDistanceK(double long1, double lat1, double long2, double lat2) {
        double a, b, d, sa2, sb2;
        lat1 = rad(lat1);
        lat2 = rad(lat2);
        a = lat1 - lat2;
        b = rad(long1 - long2);

        sa2 = Math.sin(a / 2.0);
        sb2 = Math.sin(b / 2.0);
        d = 2   * EARTH_RADIUS
                * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1)
                * Math.cos(lat2) * sb2 * sb2));
        return d;
    }
    
    /**   
     * 通过经纬度获取距离(单位：米)   
     * @param lat1   
     * @param lng1   
     * @param lat2   
     * @param lng2   
     * @return   
     */    
    public static double getDistanceM(double lat1, double lng1, double lat2,    
                                     double lng2) {    
        double radLat1 = rad(lat1);    
        double radLat2 = rad(lat2);    
        double a = radLat1 - radLat2;    
        double b = rad(lng1) - rad(lng2);    
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)    
                + Math.cos(radLat1) * Math.cos(radLat2)    
                * Math.pow(Math.sin(b / 2), 2)));    
        s = s * EARTH_RADIUS;    
        s = Math.round(s * 10000d) / 10000d;    
        s = s*1000;    
        return s;    
    }  
    
    //转化为弧度
    private static double rad(double d) {    
        return d * Math.PI / 180.0;    
    } 
    
    /**
     * 是否超出范围
     * @param lat 经度
     * @param lng 纬度
     * @return
     */
    public static boolean isWithin(double lat1, double lng1, double lat2, double lng2, int r) {
    	return getDistanceM(lat1, lng1, lat2, lng2) > Double.parseDouble(String.valueOf(r));
    }
}
